package com.mybatis.basic.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;

@Service
public abstract class BasicServiceImpl<T> {

	@Autowired
	private Mapper<T> mapper;

	/**
	 * 添加一条数据
	 * @param entity
	 * @return
	 */
	public int insertOne(T entity){
		return mapper.insert(entity);
	}

	/**
	 * 修改一条数据，只修改不为空的字段
	 * @param entity
	 * @return
	 */
	public int updateNotNull(T entity){
		try {
			return mapper.updateByPrimaryKeySelective(entity);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 88;
	}

	/**
	 * 修改一条数据，全部字段都修改
	 * @param entity
	 * @return
	 */
	public int update(T entity){
		return mapper.updateByPrimaryKey(entity);
	}

	/**
	 * 根据ID删除一条数据，ID不能为空
	 * @param key
	 * @return
	 */
	public int deleteById(T key){
		return mapper.deleteByPrimaryKey(key);
	}

	/**
	 * 根据实体属性作为条件进行删除，查询条件使用等号
	 * @param entity
	 * @return
	 */
	public int deleteByCondition(T entity){
		return mapper.delete(entity);
	}

	/**
	 * 根据ID查询一条数据
	 * @param key
	 * @return
	 */
	public T selectById(T key){
		return mapper.selectOne(key);
	}

	/**
	 * 根据属性查询，只能有一条返回数据，否则抛出异常，查询条件使用等号
	 * @param key
	 * @return
	 */
	public T selectOneByCondition(T key) {
		return mapper.selectOne(key);
	}

	/**
	 * 查询所有数据
	 * @return
	 */
	public List<T> selectAll(){
		return mapper.selectAll();
	}

	/**
	 * 根据实体中的属性查询总数，查询条件使用等号
	 * @param entity
	 * @return
	 */
	public int selectCount(T entity){
		return mapper.selectCount(entity);
	}

	/**
	 * 分页查询(不带条件)
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public List<T> selectListByPage(int pageNum,int pageSize){
		PageHelper.startPage(pageNum, pageSize);
		return mapper.selectAll();
	}

	/**
	 * 分页查询(条件查询)
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public List<T> selectListByPageCondition(Example example,int pageNum,int pageSize){
		PageHelper.startPage(pageNum, pageSize);
		return mapper.selectByExample(example);
	}

}
